/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.tutwiz.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.tutwiz.model.Tag;
import net.tutwiz.model.Vote;
import net.tutwiz.model.User;
import net.tutwiz.model.Step;
import net.tutwiz.model.Comment;
import net.tutwiz.model.Tutorial;
import net.tutwiz.persistence.TagPersistenceMangager;
import net.tutwiz.persistence.TutorialPersistenceManager;
import net.tutwiz.persistence.UserPersistenceManager;

/**
 * @author vind
 */
public class DatabasePopulator {

    private static UserPersistenceManager userPM;
    private static TutorialPersistenceManager tutorialPM;
    private static TagPersistenceMangager tagPM;
    private static List<User> users = new ArrayList<User>();
    private static List<Tag> tags = new ArrayList<Tag>();
    private static List<String> texts = new ArrayList<String>();

    public static void populate() {
        init();
        populateUsers();
        populateTags();
        populateTutorials();
    }

    private static void init() {
        userPM = new UserPersistenceManager();
        tagPM = new TagPersistenceMangager();
        tutorialPM = new TutorialPersistenceManager();
        texts.add("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet sollicitudin lorem. Nulla eget sapien sed eros mattis scelerisque ut vel arcu. Fusce blandit placerat aliquam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam pharetra nunc non urna ornare at pellentesque risus scelerisque. Nunc sagittis fermentum lorem et consectetur. Nunc ut lorem turpis, et condimentum orci. Maecenas vel justo lectus.");
        texts.add("Ut facilisis bibendum massa eget hendrerit. Phasellus eu orci justo, in congue dui. Phasellus sagittis imperdiet odio, vel ultrices mauris ultrices eget. Sed sit amet purus sed dolor bibendum facilisis. Phasellus feugiat risus quis libero rhoncus id varius erat facilisis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec lorem turpis, porttitor eget sagittis a, bibendum eget quam. Etiam porta leo in dolor convallis a lacinia neque pellentesque. In elit nisi, lobortis vel vulputate ut, viverra nec arcu. Maecenas sed magna vel libero dictum accumsan. Proin tempus aliquam felis, sed blandit odio interdum id. Ut vel nulla ac magna pellentesque blandit id et libero.");
        texts.add("Sed vulputate rutrum convallis. Pellentesque adipiscing rutrum justo, imperdiet fermentum eros eleifend a. Proin vitae velit mauris. Donec sodales, purus a aliquet interdum, nulla lacus egestas purus, eget iaculis lacus lacus in ante. Ut accumsan egestas dictum. Praesent ut dui eros, id tincidunt tellus. Integer facilisis pharetra sem, tristique fermentum lacus congue ac. Aliquam et ante velit, non suscipit mauris. Cras accumsan ligula quis mauris feugiat sit amet cursus nunc aliquam. In hendrerit ultrices tortor in dapibus. Donec interdum consequat orci, a auctor augue ornare non. Quisque vel nisl lacus, at iaculis justo. Curabitur egestas tincidunt metus, a pulvinar lectus volutpat ut. Sed a condimentum lacus. Duis vitae urna sed enim rhoncus fermentum eget sed justo.");
        texts.add("Nulla ultrices gravida nulla ut bibendum. Sed luctus vehicula metus a congue. Ut vulputate dui ut dui mollis sodales. Ut massa ligula, tristique a auctor sit amet, ultrices ut ante. Aliquam ligula turpis, tincidunt nec fringilla malesuada, mollis eu diam. Suspendisse potenti. Cras pretium congue ullamcorper. Donec ipsum risus, molestie et vehicula non, faucibus id odio. Morbi ac faucibus nulla. Aliquam arcu eros, viverra venenatis venenatis vitae, rhoncus in sem. Ut placerat porta sapien. Ut eu orci ipsum, luctus pellentesque velit. Aenean fringilla bibendum nisl, a convallis ligula faucibus sed. Donec vestibulum adipiscing augue, nec varius lacus faucibus rhoncus. Quisque egestas, metus eu blandit malesuada, augue elit mattis lacus, eu interdum eros nisi vel elit. Maecenas quis nisl non nibh imperdiet fringilla id eget dui.");
        texts.add("Curabitur ut dolor tellus, eget bibendum justo. Ut et felis diam. Suspendisse at magna aliquam leo tincidunt consequat. Nulla ut augue turpis. Sed porttitor hendrerit tortor a tristique. Donec eget aliquam metus. Mauris non ligula odio, et eleifend libero. Nulla facilisi. Nullam nulla lectus, ultricies vitae mattis vitae, posuere quis metus. Curabitur quis mi risus. Sed auctor arcu mattis leo euismod elementum. Duis viverra vulputate fringilla. Maecenas luctus, ipsum at consequat bibendum, dolor augue commodo libero, vel aliquam lorem nulla et dui. Aenean eget lacus quis erat semper rutrum.");
    }
    
    private static void populateUsers() {
        User u;

        for (int i = 1; i <= 10; i++) {
            u = new User(
                    "name" + i,
                    "123" + i,
                    "user" + i + "@hotmail.com",
                    "user" + i + ".blogspot.net");
            users.add(u);    
        }
    }
    
    private static void populateTags() {
        Tag[] tags2 = {
            new Tag("Banan"),
            new Tag("Apelsin"),
            new Tag("Äpple"),
            new Tag("Linux"),
            new Tag("Mac"),
            new Tag("Windows"),
            new Tag("Debian"),
            new Tag("Xmonad"),
            new Tag("Openbox")
        };

        for (Tag t : tags2) {
            tags.add(t);
            //tagPM.save(t);
        }
    }
    
    private static void populateTutorials() {
        for(User u : users){
            List<Tutorial> tutorials = new ArrayList<Tutorial>();
            for(int k = 0; k < 2; k++){
                Tutorial t = new Tutorial("Tutorial "+u.getName(), "Description by "+u.getName(), tags, u);
                List<Step> steps = new ArrayList<Step>();
                for (int i = 0; i < 10; i++) {
                    Step s = new Step(t, i, "title" + i, texts.get(new Random().nextInt(4)) + i); 
                    List<Comment> comments = new ArrayList<Comment>();
                    for(int j = 0; j < 3 ;j++){
                        comments.add(new Comment(u, s, "Title "+j, "Text "+j+" by User "+u));
                    }
                    s.setLink("http://www.google.com");
                    s.setComments(comments);
                    steps.add(s);
                }  
                for(int i = 0; i < 10; i++)
                {
                    t.addVote(new Vote(t, new Random().nextBoolean(), u));
                }
                t.setSteps(steps);
                tutorials.add(t);
            }
            for(Tutorial t : tutorials){
                u.addTutorial(t);
               // t.addTag()
            }
            userPM.save(u);
        } 
        //addTags();
    }
    
    
    //NOT WORKING PROPERLY?!?!??
    private static void addTags()
    {
        Tutorial t = users.get(0).getTutorials().get(0);
        Tag tag = tags.get(0);
        tag.getTutorials().add(t);
        t.addTag(tag);
        tutorialPM.update(t);
    }
}
